﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.netn
    非线性方程组拟牛顿法
    f(double[] x, double[] y, int n) 计算方程组各方程左端函数值的函数名。
    参数 n: 非方程组阶数。
    参数 eps: 控制精度要求。
    参数 h: 增量初值,h>0。返回时将被破坏。
    参数 x: x[n]存放初值。返回方程组实数解。
    参数 inter: 最多迭代次数
    返回值 函数返回实际迭代次数。若<0则表示因AZ=B奇异或beta=0而失败。本函数最大迭代次数为1000。
    */

    public static unsafe string drive_netn()
    {
        int i, k;
        double eps, h;
        double[] x = new double[3] { 1.0, 1.0, 1.0 };
        h = 0.1;
        eps = 0.0000001;

        gl.f_xa_ya_n = netnf;
        k = gl.netn(3, eps, h, x, 1000);

        return gl.html_table("迭代次数=" + k, x);
    }

    // 方程组
    private static unsafe double netnf(double* x, double* y, int n)
    {
        //n = n;
        y[0] = x[0] * x[0] + x[1] * x[1] + x[2] * x[2] - 1.0;
        y[1] = 2.0 * x[0] * x[0] + x[1] * x[1] - 4.0 * x[2];
        y[2] = 3.0 * x[0] * x[0] - 4.0 * x[1] + x[2] * x[2];
        return 0.0;
    }
}